博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分页和异步验证注册
阅读量:5091 次
发布时间:2019-06-13

本文共 8198 字,大约阅读时间需要 27 分钟。

1.分页

分页条:【首页】【上一页】[1][2][3][4]【下一页】【尾页】

分页功能的实现:
物理分页:一次只查10条记录,点击下一页,再去查询后10条,使用sql语句进行控制的分页
缺点:经常需要和数据库交互
优点:数据量特别大,不会导致内存溢出
逻辑分页:一次性将所有数据全都查询出来,根据需要进行截取.List集合进行控制. subList();
缺点:数据量如果特别大,容易导致内存溢出.
优点:与数据库交互次数少.
不同的数据库对分页的语句也是不一样的
MYSQL进行分页: 使用limit关键字.
* select * from xxx limit a,b;

根据页数计算 limit后面的两个参数:
* currPage begin pageSize
    1    0      10
    2    10    10
    3    20    10
* begin = (currPage - 1) * pageSize;
参数的传递:
* 前台--->后台:currPage
* 后台--->前台:currPage,totalPage(总页数),totalCount(总记录数),pageSize,List
使用JavaBean封装参数:
* 后台--->前台:传递一个JavaBean就可以.

实现:

在index.jsp中添加一个分页访问数据的链接

在web.servlet层创建ProductFindByPageServlet

public class ProductFindByPageServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * 分页的servlet     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        try {            //获取表单数据            int currentPage = Integer.parseInt(request.getParameter("currentPage"));            //调用业务逻辑            ProductService ps = new ProductService();            PageBean pageBean = ps.findByPage(currentPage);            //分发转向            request.setAttribute("pageBean", pageBean);            request.getRequestDispatcher("/jsp/product_page.jsp").forward(request, response);        } catch (Exception e) {            e.printStackTrace();        }     }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

把当前页传递到service层,在service层处理业务逻辑

因为在业务层需要把当前页,总页,总记录数等数据封装到一个pageBean中,所以首先先创建pageBean类

public class PageBean {    //当前页    private int currentPage;    //总记录数    private int totalCount;    //每页显示数    private int pageSize;    //总页数    private int totalPage;    //每页显示的数据信息    private List
list; public PageBean(int currentPage, int totalCount, int pageSize, int totalPage, List
list) { super(); this.currentPage = currentPage; this.totalCount = totalCount; this.pageSize = pageSize; this.totalPage = totalPage; this.list = list; } public PageBean() { super(); } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List
getList() { return list; } public void setList(List
list) { this.list = list; } }

编写业务层

/**     * 把当前页,总记录数,每页显示数,总页数,封装到pagebean,返回给servlet     * @throws SQLException      * */    public PageBean findByPage(int currentPage) throws SQLException {        //创建pagebean对象        PageBean pb = new PageBean();        //设置当前页,封装到pagebean        pb.setCurrentPage(currentPage);        //设置每页显示数,并封装到pagebean        int pageSize = 10;        pb.setPageSize(pageSize);        /**         * 调用dao层获取到总记录数,封装到pagebean中         * */        int totalCount = pd.findCount();        pb.setTotalCount(totalCount);        //得到总页数,封装到pagebean        /*Double numCount = (double) (totalCount/pageSize);        int totalPage = numCount.intValue();*/        double tc = totalCount;        //向上取整        Double num  = Math.ceil(tc/pageSize);        int totalPage = num.intValue();        pb.setTotalPage(totalPage);        //获取limit的第一个参数(从第几条开始)        int begin = (currentPage - 1) * pageSize;        /**         * 调用dao层,获取每页显示的product数据,封装到list中在封装到pagebean中         * */        //传入limit需要的开始页和每页显示的记录数        List
list = pd.findByPage(begin,pageSize); pb.setList(list); return pb; }

//返回总记录数

public int findCount() throws SQLException {        String sql = "select count(*) from product";        Long l = (Long) qr.query(sql, new ScalarHandler());        return l.intValue();    }
//拿到分页的当前分页的数据    public List
findByPage(int begin, int pageSize) throws SQLException { String sql = "select * from product limit ?,?"; Object [] params = {begin,pageSize}; List
list = qr.query(sql, new BeanListHandler
(Product.class), params); return list; }

2.AJAX异步验证注册

首先是不使用jq的方式用 异步完成验证注册

这是一个输入用户名界面的div

          
请输入用户名:

为这个标签绑定一个失去焦点的事件

document.getElementById("username").onblur = function() {        //获取异步对象    var xhr = createXMLHttp;    //设置监听    xhr.onreadystatechange = function() {        var username = document.getElementById("username").value;        if(xhr.readyState == 4 && xhr.status == 200) {            var data = xhr.responseText;            if(data == 1) {                document.getElementById("show").innerHTML = "用户名可以使用";            }else {                document.getElementById("show").innerHTML = "用户名已经被占用";            }            document.getElementById("show").innerHTML = "bbb";        }    }    xhr.open("POST","/AJAX/CheckServlet",true);    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");    xhr.send("username="+username);    xhr.send("username="+username);}
//提供一个异步对象创建的方法function createXMLHttp() {    var xmlHttp;    try { // Firefox, Opera 8.0+, Safari        xmlHttp = new XMLHttpRequest();    } catch (e) {        try {// Internet Explorer            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");        } catch (e) {            try {                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");            } catch (e) {            }        }    }    return xmlHttp;}

编写CheckServlet

public class CheckServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    /**     * 异步校验用户名     */    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        String username = request.getParameter("username");        System.out.println("username="+username);        try {            UserService us = new UserService();            User user = us.checkUser(username);            System.out.println(user);            if(user == null) {                //response.getWriter().println(1);                response.getWriter().println("用户名可以使用");            }else {                //response.getWriter().println(2);                response.getWriter().println("用户名已经被占用");            }        } catch (SQLException e) {            e.printStackTrace();        }    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

业务层

public class UserService {        UserDao ud = new UserDao();    public User checkUser(String username) throws SQLException {        User user = ud.check(username);        return user;    }    }

dao层

public class UserDao {QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());public User check(String username) throws SQLException {String sql = "select * from users where username = ?";Object [] params = {username};User user = qr.query(sql, new BeanHandler
(User.class), params);return user;}}

但是jq框架让异步验证更简便,所以更推荐使用异步

JQuery的AJAX
JQuery的AJAX部分方法:
* Jq的对象.load(路径,参数,回调函数);
* $.get(路径,参数,回调函数,数据类型);
* $.post(路径,参数,回调函数,数据类型);
* $.ajax();
* serialize(); -- JQ的AJAX传递参数的时候需要使用的方法.

首先引入两个jq的文件

编写jquery.js

$(function () {    //给用户名文本框添加事件    $("#username").blur(function() {        //获取文本框中的值        var username = $(this).val();        //调用方法        $("#show").load("/AJAX/CheckServlet",{"username":username});    });});

 

转载于:https://www.cnblogs.com/learnjfm/p/6936976.html

你可能感兴趣的文章
汇编语言基本语句
查看>>
判断圆和矩形是否相交C - Rectangle and Circle
查看>>
算法题:括号匹配(小中大括号序列)
查看>>
goland激活码
查看>>
Java中的集合HashSet、LinkedHashSet、TreeSet和EnumSet(二)
查看>>
使用BIND安装智能DNS服务器(三)---添加view和acl配置
查看>>
JAVA从零开始做微信公众号开发(三)[微信公众平台返回码说明]
查看>>
如何在 Linux 中找到你的 公网IP 地址
查看>>
函数编程练习题1
查看>>
基本数据类型与格式化输出
查看>>
elasticsearch的java搜索语法
查看>>
递归、遍历、冒泡
查看>>
python高级
查看>>
Asp.Net 之Jquery知识点运用
查看>>
布尔表达式
查看>>
Stopwatch 计时器类
查看>>
Win Phone 8 Emulator启动错误:提示无法创建虚拟机,Xde找不到主机的IPv4地址
查看>>
c++类与对象(1)——构造,复制构造函数
查看>>
Java基础(四) StringBuffer、StringBuilder原理浅析
查看>>
UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】
查看>>